package com.zyn.java8.lib;

import java.util.Optional;

/**
 * Java应用中最常见的bug就是空值异常。在Java 8之前，Google Guava引入了Optionals类来解决NullPointerException，
 * 从而避免源码被各种null检查污染，以便开发者写出更加整洁的代码。Java 8也将Optional加入了官方库。
 * 
 * @author tongyufu
 *
 */
public class OptionalDemo {

    public static void main(String[] args) {
        OptionalDemo.nullable();
    }

    public static void nullable() {
        Optional<String> name = Optional.ofNullable(null);
        //如果Optional实例持有一个非空值，则isPresent()方法返回true，否则返回false
        System.out.println("Name is set? " + name.isPresent());
        //orElseGet()方法，Optional实例持有null，则可以接受一个lambda表达式生成的默认值
        System.out.println("Name：" + name.orElseGet(() -> "none"));
        //map()方法可以将现有的Opetional实例的值转换成新的值；orElse()方法与orElseGet()方法类似，但是在持有null的时候返回传入的默认值
        System.out.println(name.map(s -> "Hey " + s + "!").orElse("Hey Stranger!"));
    }
}
